Qu`est-ce qu`une injection sql? [Makeuseof explique]

Le monde de la sécurité Internet est en proie à des ports ouverts, des backdoors, des failles de sécurité, les chevaux de Troie, les vers, les vulnérabilités du pare-feu et une foule d`autres questions qui nous tiennent tous chaque jour sur nos orteils. Pour les utilisateurs privés, les virus et les vers semblent être la pire des possibilités. Mais pour toute personne utilisant une base de données, l`injection SQL est l`un des plus destructeurs des failles de sécurité là-bas.

Les bases de données sont extrêmement précieuses dans le domaine des ordinateurs. Ils sont essentiels pour stocker des données comme la mémoire et montrant les différentes relations entre les points de données. Chez MakeUseOf, nous avons de nombreuses bases de données dédiées à différentes tâches: un pour tous nos articles, une pour notre base d`utilisateurs, un pour notre programme de récompenses, et la liste est longue. Qu`est-ce qui se passe quand nos bases de données sont malicieusement attaqué - ou même détruits?

Lorsque vous n`avez pas accès réel à une base de données, l`injection SQL est l`une des formes d`attaque les plus importantes. Continuez votre lecture pour apprendre ce qu`il est exactement et comment il peut être si dangereux.

Qu`est-ce que SQL, de toute façon?

Pour comprendre l`injection SQL, vous devez d`abord comprendre ce que SQL est et comment il se rapporte à un site Web. SQL, ce qui signifie Structured Query Language, est un type de langage de programmation optimisé pour la gestion des données tabulaires. Pour toutes fins utiles, il est juste une façon pour les programmeurs de communiquer avec une base de données et lui donner des commandes.

injection SQL

Chaque fois qu`une base de données est sollicité, il existe des commandes SQL étant données et traitées. Si vous pensez à tous les moments où une base de données est soumis à l`action, vous concluez qu`il ne se produit que dans une poignée de circonstances:

  • Lorsque de nouvelles données doit être inséré,
  • Lorsque les données en cours doit être changé,
  • Lorsque les anciennes données doit être supprimé,
  • Quand un élément particulier de données doit être recherché et récupéré.

Chaque fois que l`une de ces actions doit se produire, une commande SQL est en cours d`exécution quelque part sur un serveur. Pour la plupart, le programmeur arrive à déterminer quand et où ces commandes SQL apparaissent dans le code source. Cependant, il y a des circonstances inévitables lorsqu`un utilisateur peut forcer une manipulation d`une base de données - et ces opportunités sont tout autour de vous.

Avez-vous déjà connecté à un site Web? Avez-vous déjà posté un commentaire sur un article de blog ou une réponse dans un fil de discussion? Déjà envoyé un message à un ami Facebook? Dactylographié un email dans Gmail? Recherché pour un site sur Google? Chaque fois que vous voyez un champ de saisie sur un site Web (nom d`utilisateur, mot de passe, la requête de recherche, boîte de message, etc.), ce texte est envoyé à la base de données et utilisés.

Maintenant, si un utilisateur malveillant a voulu falsifier une base de données, il n`y a pas beaucoup de choix pour lui. Une possibilité serait de gain réel physique l`accès au serveur et le détruire à sa base. Mais sinon, il fait le plus de sens pour l`utilisateur malveillant de pirater une commande SQL existante lors de l`utilisation d`un champ d`entrée, forçant ainsi le serveur d`exécuter une commande différente de ce qui était initialement prévu.

La technique d`injection SQL

Cet acte de détournement d`une commande SQL existante est ce que l`injection SQL se réfère. Pourquoi est-il appelé injection? Parce que le détournement d`une commande SQL requiert que l`utilisateur d`injecter son propre code SQL lorsque vous utilisez un champ de saisie. Est-ce que son confusion? Permettez-moi d`illustrer par un exemple.

Considérez la page de connexion de MakeUseOf. Lorsque vous entrez votre nom d`utilisateur et mot de passe et cliquez sur «Soumettre« , Vous forçant le serveur Web pour générer une commande SQL qui implique les informations que vous venez de donner-à-dire votre nom d`utilisateur et mot de passe. La base de données reçoit les informations, vérifie que la combinaison nom d`utilisateur / mot de passe est correct, vous donne l`accès approprié à d`autres zones du site.

ce qui est l`injection sql

Maintenant, imaginez ce qui se passerait si un utilisateur malveillant n`a pas entré dans son nom d`utilisateur et mot de passe, mais tapé une commande SQL comme son nom d`utilisateur? Si le code du serveur n`est pas bloqué, la base de données recevra le nom d`utilisateur défectueux (ce qui est vraiment une commande SQL) et exécuter effectivement comme une commande.

Et voilà pourquoi on l`appelle injection. La commande SQL est injecté dans la base de données par des moyens tout à fait légitimes, manipuler de telle sorte qu`il finit par faire quelque chose qu`il ne devait pas faire.

Exemple avancé

Jusqu`à présent, je l`ai décrit l`injection SQL en termes de haut niveau afin que tout le monde peut comprendre, même sans connaissances en programmation. Dans cette section, je vais donner un exemple concret de Comment cette technique est possible. Si vous êtes un débutant SQL, ou si vous ne l`avez jamais avant portaient sur des émissions, vous pouvez sauter tranquillement cette section.

Lorsque vous vous connectez à un site Web, voici un moyen possible que le code pourrait être écrit en SQL:

SELECT user_id
DE users_db
OU nom d`utilisateur = `$ username` AND password = `$ password`

En gros, la commande demande à la base de données de retourner tous user_ids de la table users_db qui correspondent à la combinaison nom d`utilisateur et mot de passe entré. On dirait bien beau, non?

Supposons que le formulaire de connexion a reçu les entrées suivantes:

Nom d`utilisateur: David
Mot de passe: fubar » OR « x `=` x

Notez que le champ de mot de passe ne commence pas ou se terminer par une apostrophe. Lorsque le serveur reçoit cette tentative de connexion, il faudra tout donné dans le champ de mot de passe et de le mettre à la place du mot de passe $ dans le code. La commande SQL résultant ressemblera à ceci:

SELECT user_id
DE users_db
Où username = `David` AND password = »fubar » OR « x `= x`

Lorsque le serveur exécute cette commande, la dernière partie de cette commande SQL toujours return true. Cela signifie que l`utilisateur malveillant d`entrée pourrait tout nom d`utilisateur et accéder instantanément à ce compte parce que la connexion fonctionnerait si oui ou non il a obtenu le droit de mot de passe.

injection SQL

Bien sûr, vous connectant au compte de quelqu`un est une infraction plutôt légère quand on le compare à toutes les autres tentatives de hack possibles: suppression de bases de données entières, déblayage toutes les données, ou même vol les données contenues dans les bases de données.

Les développeurs web professionnels sont de mieux en mieux à prévenir de tels trucs, mais tous les temps en temps vous entendrez qu`une entreprise a subi une perte aux mains d`une attaque par injection SQL. Quand cela arrive, vous savez maintenant ce que cela signifie et comment il est possible.

Articles connexes